package cn.mayday.algorithms.year2021.month1.E栈专题;

import java.util.Stack;

/**
 * 【简单】
 * <p>
 * 20. 有效的括号
 * 给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串 s ，判断字符串是否有效。
 * <p>
 * 有效字符串需满足：
 * <p>
 * 左括号必须用相同类型的右括号闭合。
 * 左括号必须以正确的顺序闭合。
 *
 * @author Mayday05
 * @date 2021/5/14 11:59
 */
public class Leetcode20IsValid {


    public static void main(String[] args) {

    }


    public boolean isValid(String s) {

        // 辅助栈
        Stack<Character> stack = new Stack();

        // 暴力循环
        for (int i = 0; i < s.length(); i++) {
            char temp = s.charAt(i);
            // 如果是左括号类型，就入栈
            if (temp == '(' || temp == '{' || temp == '[') {
                stack.push(temp);
            } else {
                // 如果是右括号类型，栈为空直接不合法，出栈括号类型和入栈类型必须匹配
                if (stack.size() == 0) {
                    return false;
                }
                char topChar = stack.pop();
                if ((temp == ')' && '(' == topChar)
                        || (temp == '}' && '{' == topChar)
                        || (temp == ']' && '[' == topChar)) {
                    continue;
                }
                return false;
            }

        }
        // 最后栈必须为空才合法
        return stack.isEmpty();
    }


}
